﻿using System;
using System.Xml;
using System.Text;
using System.Collections;
using System.ComponentModel;
using System.Collections.Generic;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.UI.Bovespa.Ordens.Model;
using Sinacor.UI.Bovespa.Ordens.Communication;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.PreBoleto;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.MegaBolsa;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio;
using System.Collections.ObjectModel;



namespace Sinacor.UI.Bovespa.Ordens.Presenter
{
    public class CasamentoPreBoletoPresenter : BasePresenter<ICasamentoPreBoleto>
    {
        #region Variaveis
        private ICasamentoPreBoleto _view;
        private Model.CasamentoPreBoleto _model;
        private Communication.Ordem _comunicacaoOrdem;
        private Communication.Negocio _comunicacaoNegocio;
        public ObservableCollection<EnumWrapper<Model.Enum.TipoEstrategia>> EnumsTipoEstrategia
        { get; set; }
        #endregion

        #region Construtor


        /// <summary>
        /// Construtor
        /// </summary>
        public CasamentoPreBoletoPresenter(ICasamentoPreBoleto view)
            : base(view)
        {
            this._view = view;

            // Inicializando as communications

            _comunicacaoOrdem = new Communication.Ordem(this.Session);
            _comunicacaoNegocio = new Communication.Negocio(this.Session);

            this.ModelCasamentoPreBoleto = new ModelCollection<Model.CasamentoPreBoleto>();
            this.ModelNegociosParaCasar = new ModelCollection<Model.ConsultarNegociosParaCasar>();
        }
        #endregion

        #region Enums
        public void CarregarEnums()
        {


            switch (_model.TipoMercado.Value)
            {
                case Model.Enum.TipoMercado.Vista:
                    this.EnumsTipoEstrategia = EnumWrapper<Model.Enum.TipoEstrategia>.GetEnums
                                                            (
                                                                Model.Enum.TipoEstrategia.Nenhuma,
                                                                Model.Enum.TipoEstrategia.POP
                                                            );
                    break;
                case Model.Enum.TipoMercado.OpcaoCompra:
                case Model.Enum.TipoMercado.OpcaoVenda:
                    this.EnumsTipoEstrategia =
                                        EnumWrapper<Model.Enum.TipoEstrategia>.GetEnums
                                            (
                                                Model.Enum.TipoEstrategia.BOX,
                                                Model.Enum.TipoEstrategia.DBX,
                                                Model.Enum.TipoEstrategia.Nenhuma,
                                                Model.Enum.TipoEstrategia.POP
                                            );

                    break;

                case Model.Enum.TipoMercado.ExercicioOpcaoCompra:
                case Model.Enum.TipoMercado.ExercicioOpcaoVenda:

                    this.EnumsTipoEstrategia =
                        EnumWrapper<Model.Enum.TipoEstrategia>.GetEnums
                                        (
                                            Model.Enum.TipoEstrategia.DBX,
                                            Model.Enum.TipoEstrategia.Nenhuma

                                        );
                    break;

                default:
                    this.EnumsTipoEstrategia =
                                        EnumWrapper<Model.Enum.TipoEstrategia>.GetEnums
                                                    (
                                                        Model.Enum.TipoEstrategia.Nenhuma

                                                    );
                    break;




            }


            View.ApresentarEnumsTipoEstrategia();
        }

        #endregion


        #region Models
        private ModelCollection<Model.CasamentoPreBoleto> _ModelCasamentoPreBoleto;
        /// <summary>
        /// Contém as models que serão exibidas no grid, repare que somente a própria presenter
        /// pode inicializar e preencher esta property
        /// </summary>
        public ModelCollection<Model.CasamentoPreBoleto> ModelCasamentoPreBoleto
        {
            get { return _ModelCasamentoPreBoleto; }
            private set
            {
                _ModelCasamentoPreBoleto = value;
                if (_ModelCasamentoPreBoleto != null)
                {
                    // Habilitando controle de estado, procure habilitar o 
                    // controle de estado no set da property
                    this.ModelCasamentoPreBoleto.EnableStateControl = true;
                }
            }
        }

        private ModelCollection<Model.ConsultarNegociosParaCasar> _ModelNegociosParaCasar;
        /// <summary>
        /// Contém as models que serão exibidas no grid, repare que somente a própria presenter
        /// pode inicializar e preencher esta property
        /// </summary>
        public ModelCollection<Model.ConsultarNegociosParaCasar> ModelNegociosParaCasar
        {
            get { return _ModelNegociosParaCasar; }
            private set
            {
                _ModelNegociosParaCasar = value;
                if (_ModelNegociosParaCasar != null)
                {
                    // Habilitando controle de estado, procure habilitar o 
                    // controle de estado no set da property
                    this.ModelNegociosParaCasar.EnableStateControl = true;
                }
            }
        }

        #endregion

        #region Inicializar
        /// <summary>
        /// Inicializa a presenter, este método será chamado no AfterInicialize da SinacorWindow, 
        /// e se possível deveria estar presente em todas as presenters, sempre com este nome.
        /// </summary>
        public void Inicializar()
        {
            // Carrega e exibe as models
            this.CarregarModels();
        }
        #endregion

        #region CarregarModels
        /// <summary>
        /// Consulta e exibe as models, verifique que os parâmetros da pesquisa foram passados pela 
        /// property ParametroPesquisa (que foi preenchida automaticamente pelo binding)
        /// </summary>
        public void CarregarModels()
        {
            // Toda chamada para comunication deve ter este try/catch,
            // somente o método da comunication deve estar no try/catch
            try
            {
                // Capturando models da comunication
                //this.ModelCasamentoPreBoleto = _comunicacaoOrdem.ConsultaPreBoleto( .ConsultarModels(this.ParametroPesquisa);
            }
            catch (Exception ex)
            {
                base.HandleException(ex);
            }



            // Chamando método da view que vai exibir as models           
            // View.ApresentarModels();
        }
        #endregion

        #region Carregar Pré Boletos

        /// <summary>
        /// Carrega pré-boletos de acordo com os dados da ModelPai
        /// </summary>
        /// <user>jrimes</user>
        public void CarregarPreBoletos(CasamentoPreBoleto model)
        {

            _model = model;
            List<ConsultarPreBoletoResponse> consultaPreBoletoResponse;
            ModelCollection<CasamentoPreBoleto> listModel = null;
            List<OrdemResponse> listModelOrdem = null;
            CasamentoPreBoleto modelAux = null;
            ConsultarPreBoletoRequest filtro;
            CasamentoPreBoleto modelCalculos = new CasamentoPreBoleto();

            decimal somatoriaVolume = 0;
            decimal somatoriaVolumeCambio = 0;
            decimal somatoriaNegocioCambio = 0;
            try
            {
                filtro = new ConsultarPreBoletoRequest();
                this._comunicacaoOrdem = new Sinacor.UI.Bovespa.Ordens.Communication.Ordem(this.Session);

                filtro.NumeroOrdem = model.NumeroOrdem;
                filtro.NumeroOrdemSequencia = model.NumeroOrdemSequencia;
                filtro.DataOrdem = model.DataOrdem;
                filtro.DataPregao = model.DataPregao.Value;

                consultaPreBoletoResponse = this._comunicacaoOrdem.ConsultaPreBoleto(filtro);

                listModel = new ModelCollection<CasamentoPreBoleto>();

                foreach (ConsultarPreBoletoResponse item in consultaPreBoletoResponse)
                {
                    modelAux = new CasamentoPreBoleto();

                    modelCalculos.QtdeDigitada += Convert.ToDecimal(item.QuantidadeNegocio);
                    //Somatoria do Volume
                    somatoriaVolume += item.Volume;
                    //TODO: Alterado para calcular a QuantidadeNegocio * Preco / Cambio - RValadao.7comm 
                    if (item.Cambio.HasValue)
                    {
                        //Calculo do Volume Cambio
                        modelAux.VolCambio = (item.Preco * item.QuantidadeNegocio) / item.Cambio.Value;

                        modelAux.Volume = item.QuantidadeNegocio * item.Cambio.Value;
                        //Somatoria do Volume Cambio
                        somatoriaNegocioCambio += modelAux.Volume;
                        somatoriaVolumeCambio += modelAux.VolCambio;

                    }



                    modelAux.QuantidadeNegocio = item.QuantidadeNegocio;
                    modelAux.Preco = item.Preco;
                    modelAux.ContraParte = item.ContraParte;
                    //20080416 13:09 - RValadao
                    //Incluido a conversão do TipoCasamento.
                    if (item.TipoCasamento != null)
                    {
                        switch (item.TipoCasamento)
                        {
                            case Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Nada:
                                modelAux.TipoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCasamento.Nada;
                                break;
                            case Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Parcial:
                                modelAux.TipoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCasamento.Parcial;
                                break;
                            case Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Total:
                                modelAux.TipoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCasamento.Total;
                                break;

                        }
                    }
                    else
                    {
                        modelAux.TipoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCasamento.Nada;
                    }

                    modelAux.QuantidadeCasada = item.QuantidadeCasada;
                    //TODO: Retirado a conversão para string.
                    if (item.TipoEstrategia.HasValue)
                    {
                        switch (item.TipoEstrategia)
                        {
                            case Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.BOX:
                                modelAux.TipoEstrategia = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.BOX;
                                break;
                            case Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.DBX:
                                modelAux.TipoEstrategia = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.DBX;
                                break;
                            case Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.Nenhuma:
                                modelAux.TipoEstrategia = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.Nenhuma;
                                break;
                            case Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.POP:
                                modelAux.TipoEstrategia = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.POP;
                                break;
                        }
                    }

                    modelAux.Cambio = item.Cambio;
                    modelAux.DataPregao = item.DataPregao;
                    //20080413 13:07 - RValadao.7Comm 
                    //Inclusão do DesprezaSaldo no retorno para mostrar na tela.
                    modelCalculos.DesprezaSaldo = (item.IndicadorDesprezaSaldo.HasValue) ? item.IndicadorDesprezaSaldo.Value : false;


                    //20080424 14:35 - RValadao
                    //Conversão do TipoSituacaoCasamento referente ao casamento entre
                    //quantidade de negócios e quantidade casada.
                    if (item.TipoSituacaoCasamento.HasValue)
                    {
                        switch (item.TipoSituacaoCasamento)
                        {
                            case Communication.Bovespa.Ordens.PreBoleto.TipoSituacaoCasamento.NaoCasadas:
                                modelAux.TipoSituacaoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoCasamento.NaoCasadas;
                                break;
                            case Communication.Bovespa.Ordens.PreBoleto.TipoSituacaoCasamento.CasadasParte:
                                modelAux.TipoSituacaoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoCasamento.CasadasParte;
                                break;
                            case Communication.Bovespa.Ordens.PreBoleto.TipoSituacaoCasamento.Casadas:
                                modelAux.TipoSituacaoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoCasamento.Casadas;
                                break;

                        }
                    }


                    listModel.Add(modelAux);
                }
                //TODO: Pendente. Testar a carga da tela.
                if (consultaPreBoletoResponse.Count > 0)
                {
                    modelCalculos.PrecoMedio += (somatoriaVolume / modelCalculos.QtdeDigitada);
                    modelCalculos.Volume = somatoriaVolume;
                    modelCalculos.VolCambio = somatoriaNegocioCambio;
                    modelCalculos.MedioCambio += modelCalculos.Volume / somatoriaVolumeCambio;

                }
                else
                {
                    //20080504 12:12 - RValadao
                    //Consulta a ordem pra verificar o DesprezaSaldo se a consulta anterior não retornar nada.
                    ConsultarOrdensManutencaoOrdensRequest requestOrdem = new ConsultarOrdensManutencaoOrdensRequest();
                    requestOrdem.NumeroOrdem = filtro.NumeroOrdem;
                    requestOrdem.NumeroOrdemSequencia = filtro.NumeroOrdemSequencia;
                    requestOrdem.DataOrdem = filtro.DataOrdem;
                    requestOrdem.DataPregao = filtro.DataPregao;
                    listModelOrdem = new List<OrdemResponse>();
                    listModelOrdem = this._comunicacaoOrdem.ConsultarOrdensManutencaoOrdens(requestOrdem);

                    if (listModelOrdem.Count > 0)
                    {
                        if (listModelOrdem[0].IndicadorDesprezaSaldo.HasValue)
                        {
                            modelCalculos.DesprezaSaldo = listModelOrdem[0].IndicadorDesprezaSaldo.Value;
                        }
                    }
                }

                //20080420 10:17 - RValadao
                //Movido para fora da condição acima pois não está mostrando a quantidade de saldo correta.
                modelCalculos.QtdeSaldo += (model.QtdeOrdem - modelCalculos.QtdeDigitada);
                modelCalculos.NumeroOrdem = model.NumeroOrdem;
                modelCalculos.NumeroOrdemSequencia = model.NumeroOrdemSequencia;
                modelCalculos.QtdeOrdem = model.QtdeOrdem;
                modelCalculos.Apelido = model.Apelido;
                modelCalculos.QtdeADRAnexoIV = model.QtdeADRAnexoIV; //incluido - esertorio - 200804172245 - ref issue ID0000088
                modelCalculos.QtdeADRAnexoV = model.QtdeADRAnexoV;
                modelCalculos.TipoNaturezaOperacao = model.TipoNaturezaOperacao;
                modelCalculos.Papel = model.Papel;

                this._view.ExibirCalculos(modelCalculos);
                this.ModelCasamentoPreBoleto = listModel;

                // Chamando método da view que vai exibir as models                
                View.ApresentarModelsPreBoleto();

            }

            catch (Exception ex)
            {
                base.HandleException(ex);
            }
        }

        #endregion


        #region Salvar


        /// <summary>
        ///     Efetua as alterações em base
        /// </summary>
        /// <param name="model"></param>
        /// <param name="lstInclusao"></param>
        /// <param name="lstExclusao"></param>
        /// <user>rdorta</user>
        public void Salvar(CasamentoPreBoleto model,
                            ModelCollection<Model.CasamentoPreBoleto> lstInclusao,
                            ModelCollection<Model.CasamentoPreBoleto> lstExclusao,
                            ModelCollection<Model.CasamentoPreBoleto> lstAlteracao)
        {


            Communication.Bovespa.Ordens.PreBoleto.RealizarCasamentoResponse mensagensRetorno;
            List<IncluirPreBoletoRequest> arrayInclusao = new List<IncluirPreBoletoRequest>();
            List<ExcluirPreBoletoRequest> arrayExclusao = new List<ExcluirPreBoletoRequest>();
            List<AlterarPreBoletoRequest> arrayAlteracao = new List<AlterarPreBoletoRequest>();
            string mensagemAuxiliar;

            try
            {
                this._comunicacaoOrdem = new Sinacor.UI.Bovespa.Ordens.Communication.Ordem(this.Session);

                if ((lstInclusao != null && lstInclusao.Count > 0) || (lstExclusao != null && lstExclusao.Count > 0) || (lstAlteracao != null && lstAlteracao.Count > 0))
                {

                    foreach (Model.CasamentoPreBoleto modelInclusao in lstInclusao)
                    {

                        //ConsultarPreBoletoAnaliticoResponse item = (ConsultarPreBoletoAnaliticoResponse)objItem;

                        IncluirPreBoletoRequest request = new IncluirPreBoletoRequest();

                        request.NumeroOrdem = model.NumeroOrdem;
                        request.NumeroOrdemSequencia = model.NumeroOrdemSequencia;
                        request.DataOrdem = model.DataOrdem;
                        request.DataPregao = model.DataPregao.Value;
                        request.QuantidadeNegocio = modelInclusao.QuantidadeNegocio;
                        request.Preco = modelInclusao.Preco;
                        request.ContraParte = modelInclusao.ContraParte;
                        //TODO: Incluido a conversao de enums 
                        //request.TipoEstrategia = itemInclusao.TipoEstrategia;
                        request.Cambio = modelInclusao.Cambio;



                        if (modelInclusao.TipoEstrategia != null)
                        {
                            switch ((Model.Enum.TipoEstrategia)modelInclusao.TipoEstrategia)
                            {
                                case Model.Enum.TipoEstrategia.BOX:
                                    request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.BOX;
                                    break;
                                case Model.Enum.TipoEstrategia.DBX:
                                    request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.DBX;
                                    break;
                                case Model.Enum.TipoEstrategia.Nenhuma:
                                    request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.Nenhuma;
                                    break;
                                case Model.Enum.TipoEstrategia.POP:
                                    request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.POP;
                                    break;
                            }
                        }
                        //20080424 10:05 - RValadao
                        //Inclusão do parametro TipoCasamento na gravação do pré boleto.
                        if (modelInclusao.TipoCasamento != null)
                        {
                            switch ((Model.Enum.TipoCasamento)modelInclusao.TipoCasamento)
                            {
                                case Model.Enum.TipoCasamento.Nada:
                                    request.TipoCasamento = Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Nada;
                                    break;
                                case Model.Enum.TipoCasamento.Parcial:
                                    request.TipoCasamento = Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Parcial;
                                    break;
                                case Model.Enum.TipoCasamento.Total:
                                    request.TipoCasamento = Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Total;
                                    break;
                            }
                        }
                        else
                        {
                            request.TipoCasamento = Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Nada;
                        }

                        arrayInclusao.Add(request);

                    }

                    foreach (CasamentoPreBoleto modelExclusao in lstExclusao)
                    {
                        ExcluirPreBoletoRequest modelAux = new ExcluirPreBoletoRequest();

                        modelAux.NumeroPreBoleto = modelExclusao.NumeroPreBoleto;
                        modelAux.NumeroOrdem = model.NumeroOrdem;
                        modelAux.NumeroOrdemSequencia = model.NumeroOrdemSequencia;
                        modelAux.DataOrdem = model.DataOrdem;
                        arrayExclusao.Add(modelAux);
                    }

                    foreach (Model.CasamentoPreBoleto modelAlteracao in lstAlteracao)
                    {

                        AlterarPreBoletoRequest request = new AlterarPreBoletoRequest();

                        request.NumeroPreBoleto = modelAlteracao.NumeroPreBoleto;
                        request.NumeroOrdem = model.NumeroOrdem;
                        request.NumeroOrdemSequencia = model.NumeroOrdemSequencia;
                        request.DataOrdem = model.DataOrdem;
                        request.DataPregao = model.DataPregao.Value;
                        request.QuantidadeNegocio = modelAlteracao.QuantidadeNegocio;
                        request.Preco = modelAlteracao.Preco;
                        request.ContraParte = modelAlteracao.ContraParte;
                        request.Cambio = modelAlteracao.Cambio;

                        if (modelAlteracao.TipoCasamento != null)
                        {

                            switch ((Model.Enum.TipoCasamento)modelAlteracao.TipoCasamento)
                            {
                                case Model.Enum.TipoCasamento.Nada:
                                    request.TipoCasamento = Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Nada;
                                    break;
                                case Model.Enum.TipoCasamento.Parcial:
                                    request.TipoCasamento = Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Parcial;
                                    break;
                                case Model.Enum.TipoCasamento.Total:
                                    request.TipoCasamento = Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Total;
                                    break;
                            }
                        }
                        else
                        {
                            request.TipoCasamento = Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Nada;
                        }

                        if (modelAlteracao.TipoEstrategia != null)
                        {
                            switch ((Model.Enum.TipoEstrategia)modelAlteracao.TipoEstrategia)
                            {
                                case Model.Enum.TipoEstrategia.BOX:
                                    request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.BOX;
                                    break;
                                case Model.Enum.TipoEstrategia.DBX:
                                    request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.DBX;
                                    break;
                                case Model.Enum.TipoEstrategia.Nenhuma:
                                    request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.Nenhuma;
                                    break;
                                case Model.Enum.TipoEstrategia.POP:
                                    request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.POP;
                                    break;
                            }
                        }

                        arrayAlteracao.Add(request);

                    }

                }

                mensagensRetorno = this._comunicacaoOrdem.ProcessarPreBoleto(arrayInclusao, arrayExclusao, arrayAlteracao);

                if (mensagensRetorno != null)
                {
                    mensagemAuxiliar = string.Empty;
                    if (!string.IsNullOrEmpty(mensagensRetorno.MensagemCasamento.Descricao))
                    {
                        mensagemAuxiliar = mensagensRetorno.MensagemCasamento.Descricao;
                    }
                    //20080425 09:49 - RValadao
                    //Verifica se foi feito alteração ou inclusão para disparar mensagem
                    //Em exclusão não retorna nenhum TipoCasamento.
                    else if ((lstInclusao != null && lstInclusao.Count > 0) ||
                            (lstAlteracao != null && lstAlteracao.Count > 0))
                    {
                        mensagemAuxiliar = mensagensRetorno.TipoRetornoCasamento.ToString();
                    }

                    //20080425 09:48 - RValadao
                    //Verifica se existe informação de retorno
                    if (!string.IsNullOrEmpty(mensagemAuxiliar))
                        this._view.ExibirMensagem(mensagemAuxiliar);


                    if (!string.IsNullOrEmpty(mensagensRetorno.MensagemVerificacaoCompliance.Descricao))
                    {
                        mensagemAuxiliar = mensagensRetorno.MensagemVerificacaoCompliance.Descricao;
                        if (!string.IsNullOrEmpty(mensagensRetorno.MensagemVerificacaoSaldo.Descricao))
                        {
                            mensagemAuxiliar += mensagensRetorno.MensagemVerificacaoSaldo.Descricao;
                        }
                        this._view.ExibirMensagem(mensagemAuxiliar);
                    }
                    else if (!string.IsNullOrEmpty(mensagensRetorno.MensagemVerificacaoSaldo.Descricao))
                    {
                        mensagemAuxiliar = mensagensRetorno.MensagemVerificacaoSaldo.Descricao;
                        this._view.ExibirMensagem(mensagemAuxiliar);
                    }
                }

            }

            catch (Exception ex)
            {
                base.HandleException(ex);
            }
        }

        /// <summary>
        ///     Efetua as alterações em base
        /// </summary>
        /// <param name="model"></param>
        /// <param name="lstInclusao"></param>
        /// <param name="lstExclusao"></param>
        /// <user>rdorta</user>
        public void SalvarItem(CasamentoPreBoleto model, CasamentoPreBoleto modelInclusao)
        {
            Communication.Bovespa.Ordens.PreBoleto.RealizarCasamentoResponse mensagensRetorno;
            List<IncluirPreBoletoRequest> arrayInclusao = new List<IncluirPreBoletoRequest>();
            List<ExcluirPreBoletoRequest> arrayExclusao = new List<ExcluirPreBoletoRequest>();
            string mensagemAuxiliar;

            try
            {
                this._comunicacaoOrdem = new Sinacor.UI.Bovespa.Ordens.Communication.Ordem(this.Session);

                if (modelInclusao != null)
                {

                    IncluirPreBoletoRequest request = new IncluirPreBoletoRequest();

                    request.NumeroOrdem = model.NumeroOrdem;
                    request.NumeroOrdemSequencia = model.NumeroOrdemSequencia;
                    request.DataOrdem = model.DataOrdem;
                    request.DataPregao = model.DataPregao.Value;
                    request.QuantidadeNegocio = modelInclusao.QuantidadeNegocio;
                    request.Preco = modelInclusao.Preco;
                    request.ContraParte = modelInclusao.ContraParte;
                    //TODO: Incluido a conversao de enums 
                    //request.TipoEstrategia = itemInclusao.TipoEstrategia;
                    request.Cambio = modelInclusao.Cambio;
                    if (modelInclusao.TipoEstrategia != null)
                    {
                        switch ((Model.Enum.TipoEstrategia)modelInclusao.TipoEstrategia)
                        {
                            case Model.Enum.TipoEstrategia.BOX:
                                request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.BOX;
                                break;
                            case Model.Enum.TipoEstrategia.DBX:
                                request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.DBX;
                                break;
                            case Model.Enum.TipoEstrategia.Nenhuma:
                                request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.Nenhuma;
                                break;
                            case Model.Enum.TipoEstrategia.POP:
                                request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.POP;
                                break;
                        }
                    }
                    arrayInclusao.Add(request);
                }

                mensagensRetorno = this._comunicacaoOrdem.ProcessarPreBoleto(arrayInclusao, arrayExclusao, new List<AlterarPreBoletoRequest>());

                if (mensagensRetorno != null)
                {
                    if (mensagensRetorno.MensagemCasamento.Descricao != "")
                        mensagemAuxiliar = mensagensRetorno.MensagemCasamento.Descricao;
                    else
                        mensagemAuxiliar = mensagensRetorno.TipoRetornoCasamento.ToString();

                    this._view.ExibirMensagem(mensagemAuxiliar);

                    if (mensagensRetorno.MensagemVerificacaoCompliance.Descricao != "")
                    {
                        mensagemAuxiliar = mensagensRetorno.MensagemVerificacaoCompliance.Descricao;
                        if (mensagensRetorno.MensagemVerificacaoSaldo.Descricao != "")
                        {
                            mensagemAuxiliar += mensagensRetorno.MensagemVerificacaoSaldo.Descricao;
                        }
                    }
                    else
                    {
                        if (mensagensRetorno.MensagemVerificacaoSaldo.Descricao != "")
                        {
                            mensagemAuxiliar += mensagensRetorno.MensagemVerificacaoSaldo.Descricao;
                        }
                    }
                    if (!string.IsNullOrEmpty(mensagemAuxiliar))
                        this._view.ExibirMensagem(mensagemAuxiliar);
                }

            }

            catch (Exception ex)
            {
                base.HandleException(ex);
            }
        }

        #endregion

        #region Alterar Pré Boleto
        /// <summary>
        ///     Efetua as alterações em base
        /// </summary>
        /// <param name="model"></param>
        /// <param name="lstAlteracao"></param>
        /// <user>rdorta</user>
        public void AlterarItem(CasamentoPreBoleto model, CasamentoPreBoleto modelAlteracao)
        {
            Communication.Bovespa.Ordens.PreBoleto.RealizarCasamentoResponse mensagensRetorno;
            List<AlterarPreBoletoRequest> arrayAlteracao = new List<AlterarPreBoletoRequest>();
            string mensagemAuxiliar;

            try
            {
                this._comunicacaoOrdem = new Sinacor.UI.Bovespa.Ordens.Communication.Ordem(this.Session);

                if (modelAlteracao != null)
                {

                    AlterarPreBoletoRequest request = new AlterarPreBoletoRequest();
                    request.NumeroPreBoleto = modelAlteracao.NumeroPreBoleto;
                    request.NumeroOrdem = model.NumeroOrdem;
                    request.NumeroOrdemSequencia = model.NumeroOrdemSequencia;
                    request.DataOrdem = model.DataOrdem;
                    request.DataPregao = model.DataPregao.Value;
                    request.QuantidadeNegocio = modelAlteracao.QuantidadeNegocio;
                    request.Preco = modelAlteracao.Preco;
                    request.ContraParte = modelAlteracao.ContraParte;
                    request.Cambio = modelAlteracao.Cambio;
                    //20080416 13:09 - RValadao
                    //Incluido a conversão do TipoCasamento.
                    switch ((Model.Enum.TipoCasamento)modelAlteracao.TipoCasamento)
                    {
                        case Model.Enum.TipoCasamento.Nada:
                            request.TipoCasamento = Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Nada;
                            break;
                        case Model.Enum.TipoCasamento.Parcial:
                            request.TipoCasamento = Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Parcial;
                            break;
                        case Model.Enum.TipoCasamento.Total:
                            request.TipoCasamento = Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Total;
                            break;
                    }

                    if (modelAlteracao.TipoEstrategia != null)
                    {
                        switch ((Model.Enum.TipoEstrategia)modelAlteracao.TipoEstrategia)
                        {
                            case Model.Enum.TipoEstrategia.BOX:
                                request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.BOX;
                                break;
                            case Model.Enum.TipoEstrategia.DBX:
                                request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.DBX;
                                break;
                            case Model.Enum.TipoEstrategia.Nenhuma:
                                request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.Nenhuma;
                                break;
                            case Model.Enum.TipoEstrategia.POP:
                                request.TipoEstrategia = Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.POP;
                                break;
                        }
                    }

                    arrayAlteracao.Add(request);
                }

                mensagensRetorno = this._comunicacaoOrdem.AlterarPreBoleto(arrayAlteracao);

                if (mensagensRetorno != null)
                {
                    if (mensagensRetorno.MensagemCasamento.Descricao != "")
                        mensagemAuxiliar = mensagensRetorno.MensagemCasamento.Descricao;
                    else
                        mensagemAuxiliar = mensagensRetorno.TipoRetornoCasamento.ToString();

                    this._view.ExibirMensagem(mensagemAuxiliar);

                    if (mensagensRetorno.MensagemVerificacaoCompliance.Descricao != "")
                    {
                        mensagemAuxiliar = mensagensRetorno.MensagemVerificacaoCompliance.Descricao;
                        if (mensagensRetorno.MensagemVerificacaoSaldo.Descricao != "")
                        {
                            mensagemAuxiliar += mensagensRetorno.MensagemVerificacaoSaldo.Descricao;
                        }
                    }
                    else
                    {
                        if (mensagensRetorno.MensagemVerificacaoSaldo.Descricao != "")
                        {
                            mensagemAuxiliar += mensagensRetorno.MensagemVerificacaoSaldo.Descricao;
                        }
                    }
                    if (!string.IsNullOrEmpty(mensagemAuxiliar))
                        this._view.ExibirMensagem(mensagemAuxiliar);
                }

            }

            catch (Exception ex)
            {
                base.HandleException(ex);
            }
        }

        #endregion



        #region Carregar Negócios

        /// <summary>
        /// Carrega Negócios de acordo com os dados da ModelPai
        /// </summary>
        /// <user>jrimes</user>
        public void CarregarNegocios(CasamentoPreBoleto model)
        {
            List<ConsultarNegociosParaCasarResponse> ConsultarNegocioParaCasar = null;
            ConsultarNegociosParaCasarRequest filtro = null;
            Model.ConsultarNegociosParaCasar _modelNegocioParaCasar = null;
            ModelCollection<Model.ConsultarNegociosParaCasar> ListNegociosParaCasar = null;


            try
            {
                filtro = new ConsultarNegociosParaCasarRequest();
                this._comunicacaoNegocio = new Sinacor.UI.Bovespa.Ordens.Communication.Negocio(this.Session);

                filtro.DataOrdem = model.DataOrdem;
                filtro.DataPregao = model.DataPregao.Value;
                filtro.NumeroOrdem = model.NumeroOrdem;
                filtro.NumeroOrdemSequencia = model.NumeroOrdemSequencia;


                ConsultarNegocioParaCasar = _comunicacaoNegocio.ConsultarListaNegocioParaCasar(filtro);

                if (ConsultarNegocioParaCasar != null)
                {

                    ListNegociosParaCasar = new ModelCollection<ConsultarNegociosParaCasar>();
                    foreach (ConsultarNegociosParaCasarResponse item in ConsultarNegocioParaCasar)
                    {

                        _modelNegocioParaCasar = new Model.ConsultarNegociosParaCasar();
                        _modelNegocioParaCasar.Bolsa = item.Bolsa;
                        _modelNegocioParaCasar.CodigoNegociacao = item.CodigoNegociacao;
                        _modelNegocioParaCasar.ContraParte = item.ContraParte;
                        _modelNegocioParaCasar.DataPregao = item.DataPregao;
                        _modelNegocioParaCasar.LoginOperador = item.LoginOperador;
                        _modelNegocioParaCasar.NumeroNegocio = item.NumeroNegocio;
                        _modelNegocioParaCasar.NumeroNegocioDigito = item.NumeroNegocioDigito;
                        _modelNegocioParaCasar.Preco = item.Preco;
                        _modelNegocioParaCasar.Quantidade = item.Quantidade;
                        _modelNegocioParaCasar.QuantidadeCasada = item.QuantidadeCasada;
                        _modelNegocioParaCasar.Saldo = item.Saldo;
                        _modelNegocioParaCasar.TipoCasamento = (Model.Enum.TipoCasamento)item.TipoCasamento;
                        _modelNegocioParaCasar.TipoEstrategia = (Model.Enum.TipoEstrategia)item.TipoEstrategia;
                        _modelNegocioParaCasar.TipoMercado = (Model.Enum.TipoMercado)item.TipoMercado;
                        _modelNegocioParaCasar.TipoNaturezaOperacao = (Model.Enum.TipoNaturezaOperacao)item.TipoNaturezaOperacao;
                        _modelNegocioParaCasar.TipoSituacao = (Model.Enum.TipoSituacaoCasamento)item.TipoSituacao;
                        ListNegociosParaCasar.Add(_modelNegocioParaCasar);
                    }
                    this.ModelNegociosParaCasar = ListNegociosParaCasar;
                    View.ApresentarModelsNegociosParaCasar();
                }

            }

            catch (Exception ex)
            {
                base.HandleException(ex);
            }
        }

        #endregion

        #region Desprezar Saldo

        /// <summary>
        /// Métodos Desprezar Saldo
        /// </summary>
        /// <param name="model"></param>
        /// <user>jrimes</user>
        public void DesprezarSaldo(CasamentoPreBoleto model)
        {
            DesprezarSaldoOrdemRequest filtroDesprezar;
            ConsiderarSaldoOrdemRequest filtroConsiderar;
            _comunicacaoOrdem = new Sinacor.UI.Bovespa.Ordens.Communication.Ordem(this.Session);

            try
            {
                if (model.DesprezaSaldo)
                {
                    filtroDesprezar = new DesprezarSaldoOrdemRequest();
                    filtroDesprezar.NumeroOrdem = model.NumeroOrdem;
                    filtroDesprezar.NumeroOrdemSequencia = model.NumeroOrdemSequencia;
                    filtroDesprezar.DataOrdem = model.DataOrdem;
                    _comunicacaoOrdem.DesprezarSaldoOrdem(filtroDesprezar);
                }
                else
                {
                    filtroConsiderar = new ConsiderarSaldoOrdemRequest();
                    filtroConsiderar.NumeroOrdem = model.NumeroOrdem;
                    filtroConsiderar.NumeroOrdemSequencia = model.NumeroOrdemSequencia;
                    filtroConsiderar.DataOrdem = model.DataOrdem;
                    _comunicacaoOrdem.ConsiderarSaldoOrdem(filtroConsiderar);
                }
            }

            catch (Exception ex)
            {
                base.HandleException(ex);
            }
        }

        #endregion

        #region Carregar Pre Boleto Analitico

        /// <summary>
        /// Método que da funcionalidade ao check Analitico
        /// </summary>
        /// <param name="model"></param>
        /// <user>jrimes</user>
        public void CarregarPreBoletosAnalitico(CasamentoPreBoleto model)
        {
            ConsultarPreBoletoAnaliticoRequest filtro = new ConsultarPreBoletoAnaliticoRequest();
            List<ConsultarPreBoletoAnaliticoResponse> consultaPreBoletoAnalitico = new List<ConsultarPreBoletoAnaliticoResponse>();
            ModelCollection<CasamentoPreBoleto> listModel = null;
            CasamentoPreBoleto modelCalculos = new CasamentoPreBoleto();
            CasamentoPreBoleto modelAux = null;

            decimal somatoriaVolume = 0;
            decimal somatoriaVolumeCambio = 0;
            decimal somatoriaNegocioCambio = 0;

            try
            {
                this._comunicacaoOrdem = new Sinacor.UI.Bovespa.Ordens.Communication.Ordem(this.Session);

                filtro.NumeroOrdem = model.NumeroOrdem;
                filtro.NumeroOrdemSequencia = model.NumeroOrdemSequencia;
                filtro.DataOrdem = model.DataOrdem;
                filtro.DataPregao = model.DataPregao.Value;

                consultaPreBoletoAnalitico = this._comunicacaoOrdem.ConsultarPreBoletoAnalitico(filtro);

                if (consultaPreBoletoAnalitico != null)
                {
                    listModel = new ModelCollection<CasamentoPreBoleto>();

                    foreach (ConsultarPreBoletoAnaliticoResponse item in consultaPreBoletoAnalitico)
                    {
                        modelAux = new CasamentoPreBoleto();

                        modelCalculos.QtdeDigitada += Convert.ToDecimal(item.QuantidadeNegocio);
                        //Somatoria do Volume
                        somatoriaVolume += item.Volume;
                        //TODO: Alterado para calcular a QuantidadeNegocio * Preco / Cambio - RValadao.7comm 
                        if (item.Cambio.HasValue)
                        {
                            //Calculo do Volume Cambio
                            modelAux.VolCambio = (item.Preco * item.QuantidadeNegocio) / item.Cambio.Value;

                            modelAux.Volume = item.QuantidadeNegocio * item.Cambio.Value;
                            //Somatoria do Volume Cambio
                            somatoriaNegocioCambio += modelAux.Volume;
                            somatoriaVolumeCambio += modelAux.VolCambio;
                        }

                        modelAux.NumeroPreBoleto = item.NumeroPreBoleto;
                        modelAux.QuantidadeNegocio = item.QuantidadeNegocio;
                        modelAux.Preco = item.Preco;
                        modelAux.ContraParte = item.ContraParte;
                        //20080416 13:09 - RValadao
                        //Incluido a conversão do TipoCasamento.
                        if (item.TipoCasamento != null)
                        {
                            switch (item.TipoCasamento)
                            {
                                case Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Nada:
                                    modelAux.TipoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCasamento.Nada;
                                    break;
                                case Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Parcial:
                                    modelAux.TipoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCasamento.Parcial;
                                    break;
                                case Communication.Bovespa.Ordens.PreBoleto.TipoCasamento.Total:
                                    modelAux.TipoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCasamento.Total;
                                    break;

                            }
                        }
                        else
                        {
                            modelAux.TipoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCasamento.Nada;
                        }

                        modelAux.QuantidadeCasada = item.QuantidadeCasada;
                        //TODO: Retirado a conversão para string
                        if (item.TipoEstrategia.HasValue)
                        {
                            switch (item.TipoEstrategia)
                            {
                                case Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.BOX:
                                    modelAux.TipoEstrategia = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.BOX;
                                    break;
                                case Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.DBX:
                                    modelAux.TipoEstrategia = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.DBX;
                                    break;
                                case Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.Nenhuma:
                                    modelAux.TipoEstrategia = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.Nenhuma;
                                    break;
                                case Communication.Bovespa.Ordens.PreBoleto.TipoEstrategia.POP:
                                    modelAux.TipoEstrategia = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.POP;
                                    break;
                            }
                        }
                        //20080417 15:12 - RValadao.7Comm
                        //Inclusão do DesprezaSaldo no retorno para mostrar na tela.
                        modelCalculos.DesprezaSaldo = (item.IndicadorDesprezaSaldo.HasValue) ? item.IndicadorDesprezaSaldo.Value : false;
                        modelAux.Cambio = item.Cambio;

                        //20080424 14:35 - RValadao
                        //Conversão do TipoSituacaoCasamento referente ao casamento entre
                        //quantidade de negócios e quantidade casada.
                        if (item.TipoSituacaoCasamento.HasValue)
                        {
                            switch (item.TipoSituacaoCasamento)
                            {
                                case Communication.Bovespa.Ordens.PreBoleto.TipoSituacaoCasamento.NaoCasadas:
                                    modelAux.TipoSituacaoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoCasamento.NaoCasadas;
                                    break;
                                case Communication.Bovespa.Ordens.PreBoleto.TipoSituacaoCasamento.CasadasParte:
                                    modelAux.TipoSituacaoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoCasamento.CasadasParte;
                                    break;
                                case Communication.Bovespa.Ordens.PreBoleto.TipoSituacaoCasamento.Casadas:
                                    modelAux.TipoSituacaoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoCasamento.Casadas;
                                    break;

                            }
                        }


                        listModel.Add(modelAux);

                    }
                    //20080421 20:23 - RValadao
                    //Carregar os cálculos de tela.
                    if (!modelCalculos.QtdeDigitada.Equals(0))
                        modelCalculos.PrecoMedio += (somatoriaVolume / modelCalculos.QtdeDigitada);
                    modelCalculos.QtdeSaldo += (model.QtdeOrdem - modelCalculos.QtdeDigitada);
                    modelCalculos.Volume = somatoriaVolume;
                    modelCalculos.VolCambio = somatoriaNegocioCambio;
                    if (!somatoriaVolumeCambio.Equals(0))
                        modelCalculos.MedioCambio += modelCalculos.Volume / somatoriaVolumeCambio;
                    modelCalculos.NumeroOrdem = model.NumeroOrdem;
                    modelCalculos.NumeroOrdemSequencia = model.NumeroOrdemSequencia;
                    modelCalculos.QtdeOrdem = model.QtdeOrdem;
                    modelCalculos.Apelido = model.Apelido;
                    modelCalculos.QtdeADRAnexoIV = model.QtdeADRAnexoIV; //incluido - esertorio - 200804172245 - ref issue ID0000088
                    modelCalculos.QtdeADRAnexoV = model.QtdeADRAnexoV;
                    modelCalculos.TipoNaturezaOperacao = model.TipoNaturezaOperacao;
                    modelCalculos.Papel = model.Papel;



                    this._view.ExibirCalculos(modelCalculos);
                    this.ModelCasamentoPreBoleto.Clear();
                    this.ModelCasamentoPreBoleto = new ModelCollection<Model.CasamentoPreBoleto>();
                    this.ModelCasamentoPreBoleto = listModel;
                    View.ApresentarModelsPreBoleto();


                }
            }

            catch (Exception ex)
            {
                base.HandleException(ex);
            }
        }

        #endregion

        #region CriarPreBoletoNegocio

        /// <summary>
        ///     Método para transportar o negócio para o Préboleto
        /// </summary>
        /// <param name="objeto"></param>
        /// <user>rdorta</user>
        public void CriarPreBoletoNegocio(object objeto)
        {
            try
            {
                ConsultarNegociosParaCasarResponse negocio = (ConsultarNegociosParaCasarResponse)objeto;
                CasamentoPreBoleto model = new CasamentoPreBoleto();

                model.QuantidadeNegocio = negocio.Quantidade;
                model.Preco = negocio.Preco;
                model.ContraParte = negocio.ContraParte;

                //20080416 13:09 - RValadao
                //Incluido a conversão do TipoCasamento.
                switch (negocio.TipoCasamento)
                {
                    case Communication.Bovespa.Ordens.Negocio.TipoCasamento.Nada:
                        model.TipoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCasamento.Nada;
                        break;
                    case Communication.Bovespa.Ordens.Negocio.TipoCasamento.Parcial:
                        model.TipoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCasamento.Parcial;
                        break;
                    case Communication.Bovespa.Ordens.Negocio.TipoCasamento.Total:
                        model.TipoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCasamento.Total;
                        break;
                }

                this._view.ExibirPreboletoNegocio(model);
            }

            catch (Exception ex)
            {
                base.HandleException(ex);
            }
        }

        /// <summary>
        ///     Método para transportar o negócio para o Préboleto
        /// </summary>
        /// <param name="objeto"></param>
        /// <user>rdorta</user>
        public void CriarPreBoletosNegocio(IList objetos, Model.CasamentoPreBoleto parameterPreBoleto)
        {
            try
            {

                ModelCollection<CasamentoPreBoleto> modelLista = new ModelCollection<CasamentoPreBoleto>();
                int _negocioSelecionado = 0;
                foreach (Model.ConsultarNegociosParaCasar negocio in objetos)
                {
                    CasamentoPreBoleto model = new CasamentoPreBoleto();

                    //model.QuantidadeNegocio = negocio.Quantidade;
                    //20080421 19:33 - RValadao
                    //Alterado para buscar a quantidade do saldo disponível.
                    model.QuantidadeNegocio = negocio.Saldo;
                    model.Preco = negocio.Preco;
                    model.ContraParte = negocio.ContraParte;
                    //20080416 13:09 - RValadao
                    //Incluido a conversão do TipoCasamento.
                    switch ((Model.Enum.TipoCasamento)negocio.TipoCasamento)
                    {
                        case Model.Enum.TipoCasamento.Nada:
                            model.TipoCasamento = Model.Enum.TipoCasamento.Nada;

                            break;
                        case Model.Enum.TipoCasamento.Parcial:
                            model.TipoCasamento = Model.Enum.TipoCasamento.Parcial;

                            break;
                        case Model.Enum.TipoCasamento.Total:
                            model.TipoCasamento = Model.Enum.TipoCasamento.Total;

                            break;
                    }

                    //20080422 12:01 - RValadao
                    //Inclusão do tipo de estratégia conforme bug 3373
                    switch ((Model.Enum.TipoEstrategia)negocio.TipoEstrategia)
                    {
                        case Model.Enum.TipoEstrategia.BOX:
                            model.TipoEstrategia = Model.Enum.TipoEstrategia.BOX;
                            break;
                        case Model.Enum.TipoEstrategia.DBX:
                            model.TipoEstrategia = Model.Enum.TipoEstrategia.DBX;
                            break;
                        case Model.Enum.TipoEstrategia.Nenhuma:
                            model.TipoEstrategia = Model.Enum.TipoEstrategia.Nenhuma;
                            break;
                        case Model.Enum.TipoEstrategia.POP:
                            model.TipoEstrategia = Model.Enum.TipoEstrategia.POP;
                            break;
                    }

                    //modelLista.Add(model);

                    if (VerificarLimiteSaldo(model, parameterPreBoleto))
                    {
                        this.ModelCasamentoPreBoleto.Add(model);
                        this.View.ApresentarModelsPreBoleto();
                        this.View.ApagarNegocioSelecionado(_negocioSelecionado);
                    }
                    else
                    {
                        this.View.ExibirMensagem(Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.QuantidadeNegocioMaiorSaldo);
                        break;
                    }
                    _negocioSelecionado = _negocioSelecionado + 1;
                }
                this.View.ExibirPreboletosNegocio();
            }

            catch (Exception ex)
            {
                base.HandleException(ex);
            }
        }

        #endregion

        #region Calcular Volume do Item do Grid
        /// <summary>
        /// Cálculo do volume
        /// </summary>
        /// <param name="model"></param>
        public void CalcularVolumeItem(CasamentoPreBoleto model)
        {
            try
            {
                decimal somatoriaVolume = 0;
                somatoriaVolume = Convert.ToDecimal((model.QuantidadeNegocio * model.Preco) / model.Cambio);
                model.Volume = Math.Round(somatoriaVolume, 2);
                this._view.ExibirCalculoVolume(model);

            }

            catch (Exception ex)
            {
                base.HandleException(ex);
            }

        }
        #endregion

        #region Casamento de Pré Boletos
        /// <summary>
        ///     Efetua somente o casamento entre pré-boletos e negócios. 
        /// </summary>
        /// <param name="model"></param>
        /// <user>rdorta</user>
        public void CasarPreBoletos(Model.CasamentoPreBoleto model)
        {
            Communication.Bovespa.Ordens.PreBoleto.RealizarCasamentoResponse mensagensRetorno;
            string mensagemAuxiliar;

            try
            {
                this._comunicacaoOrdem = new Sinacor.UI.Bovespa.Ordens.Communication.Ordem(this.Session);

                mensagensRetorno = this._comunicacaoOrdem.RealizarCasamento(model);

                if (mensagensRetorno != null)
                {
                    if (mensagensRetorno.MensagemCasamento.Descricao != "")
                        mensagemAuxiliar = mensagensRetorno.MensagemCasamento.Descricao;
                    else
                        mensagemAuxiliar = mensagensRetorno.TipoRetornoCasamento.ToString();

                    this._view.ExibirMensagem(mensagemAuxiliar);

                    if (mensagensRetorno.MensagemVerificacaoCompliance.Descricao != "")
                    {
                        mensagemAuxiliar = mensagensRetorno.MensagemVerificacaoCompliance.Descricao;
                        if (mensagensRetorno.MensagemVerificacaoSaldo.Descricao != "")
                        {
                            mensagemAuxiliar += mensagensRetorno.MensagemVerificacaoSaldo.Descricao;
                        }
                    }
                    else
                    {
                        if (mensagensRetorno.MensagemVerificacaoSaldo.Descricao != "")
                        {
                            mensagemAuxiliar += mensagensRetorno.MensagemVerificacaoSaldo.Descricao;
                        }
                    }
                    if (!string.IsNullOrEmpty(mensagemAuxiliar))
                        this._view.ExibirMensagem(mensagemAuxiliar);
                }

            }

            catch (Exception ex)
            {
                base.HandleException(ex);
            }
        }




        #endregion

        #region InformarStatusPreBoleto
        public void InformarStatusPreBoleto(Model.Enum.TipoSituacaoCasamento status)
        {
            switch (status)
            {
                case Model.Enum.TipoSituacaoCasamento.Casadas:
                    this.View.InformarCasadas();
                    break;

                case Model.Enum.TipoSituacaoCasamento.NaoCasadas:
                    this.View.InformarNaoCasadas();
                    break;

                case Model.Enum.TipoSituacaoCasamento.CasadasParte:
                    this.View.InformarCasadasParte();
                    break;

                default:
                    break;
            }
        }
        #endregion

        #region ConsultarAtualizacaoQuantidadeOrdemPreBoleto

        public void ConsultarAtualizacaoQuantidadeOrdemPreBoleto(Model.CasamentoPreBoleto model)
        {
            this._comunicacaoOrdem = new Sinacor.UI.Bovespa.Ordens.Communication.Ordem(this.Session);
            Model.CasamentoPreBoleto retorno = null;
            try
            {
                retorno = this._comunicacaoOrdem.ConsultarAtualizacaoQuantidadeOrdemPreBoleto();
            }
            catch (Exception ex)
            {
                base.HandleException(ex);
            }

            if (retorno != null)
                model.IndicadorAtualizacaoQuantidadeOrdemPreboleto = retorno.IndicadorAtualizacaoQuantidadeOrdemPreboleto;
        }
        #endregion

        #region Verificar Limite de Saldo
        /// <summary>
        /// Função que valida o limite de saldo com a quantidade informada no negócio
        /// </summary>
        /// <param name="modelCalculo"></param>
        /// <param name="modelTela"></param>
        /// <param name="somaVolume"></param>
        /// <returns></returns>
        public bool VerificarLimiteSaldo(Model.CasamentoPreBoleto modelCalculo, Model.CasamentoPreBoleto modelTela)
        {
            if (!modelTela.IndicadorAtualizacaoQuantidadeOrdemPreboleto)
            {
                if (modelTela.QtdeSaldo > 0)
                {
                    if (modelCalculo.QuantidadeNegocio > modelTela.QtdeSaldo)
                    {
                        modelCalculo.QuantidadeNegocio = modelTela.QtdeSaldo;
                        modelCalculo.TipoCasamento = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCasamento.Parcial;
                    }

                    if (modelCalculo.QuantidadeNegocio > modelTela.QuantidadeNegocio)
                    {
                        modelTela.QtdeDigitada += modelCalculo.QuantidadeNegocio;
                        modelTela.QtdeSaldo -= modelCalculo.QuantidadeNegocio;
                    }

                    _view.ExibirCalculos(modelTela);

                }
                else return false;
            }
            return true;
        }
        #endregion


    }
}